<?php
/**
 * Created By: ST2
 * Created on 2014-08-22 11:41:20
 * author: yongchao.yu@kunlun-inc.com
 * coding: utf-8
*/
namespace Melon\Database\Driver;


class Mysql {

    //表名
    protected $table = null;
    // 数据库类型
    protected $dbType     = null;
    // 是否自动释放查询结果
    protected $autoFree   = false;
    // 是否使用永久连接
    protected $pconnect   = false;
    // 当前SQL指令
    protected $queryStr   = '';
    protected $modelSql   = array();
    // 最后插入ID
    protected $lastInsID  = null;
    // 返回或者影响记录数
    protected $numRows    = 0;
    // 返回字段数
    protected $numCols    = 0;
    // 错误信息
    protected $error      = '';
    // 数据库连接ID 支持多个连接
    protected $linkID     = array();
    // 当前连接ID
    protected $_linkID    = null;
    // 当前查询ID
    protected $queryID    = null;
    // 是否已经连接数据库
    protected $connected  = false;
    // 数据库连接参数配置
    protected $config     = '';

    protected $options = array();

    /**
     * 自动加载函数, 实现特殊连贯操作操作
     */
    public function __call($func, $args)
    {
         if(in_array($func, array('field', 'join', 'where', 'order', 'group', 'limit', 'having')))
         {
               $this->options[$func] = array_shift($args);
               return $this;
         } elseif($func === 'table'){
               $this->options['table'] = array_shift($args);
               $this->table            = $this->options['prefix'].$this->options['table'];
               return $this;
         }
        //如果函数不存在, 则抛出异常
        \Melon::throwException( 'Call to undefined method Db::' . $func . '()' );
     }

     /**
     * 字段和表名处理添加`
     * @access protected
     * @param string $key
     * @return string
     */
    protected function parseKey(&$key) {
        $key   =  trim($key);
        if(!preg_match('/[,\'\"\*\(\)`.\s]/',$key)) {
           $key = '`'.$key.'`';
        }
        return $key;
    }

    /**
     * value分析
     * @access protected
     * @param mixed $value
     * @return string
     */
    protected function parseValue($value) {
        if(is_string($value)) {
            $value =  '\''.$this->escapeString($value).'\'';
        }elseif(isset($value[0]) && is_string($value[0]) && strtolower($value[0]) == 'exp'){
            $value =  $this->escapeString($value[1]);
        }elseif(is_array($value)) {
            $value =  array_map(array($this, 'parseValue'),$value);
        }elseif(is_bool($value)){
            $value =  $value ? '1' : '0';
        }elseif(is_null($value)){
            $value =  'null';
        }
        return $value;
    }

    /**
     * SQL指令安全过滤
     * @access public
     * @param string $str  SQL字符串
     * @return string
     */
    public function escapeString($str) {
        return addslashes($str);
    }


}

